package 泛型;
//泛型的上界————extends(不是继承，是拓展的意思)

//一个泛型类，实现一个方法，可以求指定类型数组内元素的最大值

class Alg<T extends Comparable<T>>{//T实现了Comparable接口
    T fun(T[] array){
        T max = array[0];
        for (int i = 0; i < array.length; i++) {
//            if(max < array[i]){//报错,object类不能比较
            if(array[i].compareTo(max) > 0){
                max = array[i];
            }
        }
        return max;
    }
}
//另外一种写法
class Alg2{//T实现了Comparable接口
    <T extends Comparable<T>> T  fun(T[] array){
        T max = array[0];
        for (int i = 0; i < array.length; i++) {
//            if(max < array[i]){//报错,object类不能比较
            if(array[i].compareTo(max) > 0){
                max = array[i];
            }
        }
        return max;
    }
}
class A implements Comparable<A>{

    @Override
    public int compareTo(A o) {
        return 0;
    }
}


public class Text_3 {
    public static void main(String[] args) {
        Alg<Integer> alg = new Alg<Integer>();
        Integer[] array = {1,2,3};//必须使用包装类
        Integer max = alg.fun(array);
        System.out.println(max);
//==============================================
        Alg2 alg2 = new Alg2();
        Integer[] array1 = {5,9,6};
        Integer max1 = alg2.fun(array1);//可以省略，因为可以到推
//        Integer max1 = alg2.<Integer>fun(array1);
        System.out.println(max1);
//==============================================
        Alg<A> aAlg = new Alg<A>();//需要重写CompareTo方法


    }
}
